//
//  NSDate+Sina.swift
//  001-处理时间
//
//  Created by iOS on 16/9/25.
//  Copyright © 2016年 iOS. All rights reserved.
//

import Foundation

extension Date {
    
    // 在分类中类方法使用 static
    static func dateDescription(formSinaDateString string: String) -> String {
        // 时间格式化
        let df = DateFormatter()
        
        // 设置时间的格式
        df.dateFormat = "EEE MMM dd HH:mm:ss zzz yyyy"
        // 如果是真机
        df.locale = Locale(identifier: "EN")
        // 转成系统的Date
        let sinaDate = df.date(from: string)

        // 新浪时间调用 compareDate
        return sinaDate?.compareDate() ?? "未知时间"
    }
    
    /// 新浪返回的时间和系统当前时间比较
    ///
    /// - returns: 字符串
    private func compareDate() -> String {
        // self 新浪时间
        // 当前时间 Date()
        let currentDate = Date()
        
        // Calendar, 处理时间
        let calendar = Calendar.current
        
        // 是否是今天
        if calendar.isDateInToday(self) {
            // 今天
            let dalta: Int = Int(currentDate.timeIntervalSince(self))
//            print("dalta = \(dalta)")
            if dalta < 60 {
                // 刚刚(一分钟内)
                return "刚刚"
            } else if dalta < 60 * 60 {
                // X分钟前(一小时内)
                return "\(dalta / 60) 分钟前"
            } else {
                // X小时前(当天)
                return "\(dalta / 60 / 60) 小时前"
            }
        }
        
        // 将新浪时间转成特殊时间字符串
        var dateFormat = ""
        
        if calendar.isDateInYesterday(self) {
            dateFormat = "昨天 HH:mm"
        } else if calendar.compare(self, to: currentDate, toGranularity: .year) == ComparisonResult.orderedSame {
            // 2018-1-1 -> 2016-12-31
            // 比较时间
            // date1: Date
            // toDate
            // toGranularity: 比较的单位
            // 同一年
            dateFormat = "MM-dd HH:mm"
        } else {
            // 更早期
            dateFormat = "yyyy-MM-dd HH:mm"
        }
        
        let df = DateFormatter()
        df.dateFormat = dateFormat
        // 如果是真机
        df.locale = Locale(identifier: "EN")
        
        // 将date转成字符串
        return df.string(from: self)
    }
}
